package service

import (
	"errors"
	"gin-vue-admin/global"
	"gin-vue-admin/model"
	"gin-vue-admin/model/request"

	"gorm.io/gorm"
)

// 获取菜单列表
func GetMenuInfoList(menu request.QueryMenu) (list model.Menus, err error) {
	db := global.GVA_DB.Model(&model.SysMenu{})
	if menu.MenuName != "" {
		db = db.Where("menu_name LIKE ?", "%"+menu.MenuName+"%")
	}
	if menu.Status != "" {
		db = db.Where("status = ?", menu.Status)
	}

	err = db.Find(&list).Error
	return list, err
}

// 查询菜单树
func GetMenuTree() (list model.Menus, err error) {
	err = global.GVA_DB.Model(&model.SysMenu{}).Where("menu_type != 'F'").Find(&list).Error
	return list, err
}

// 获取当前用户菜单列表
func GetUserMenuList(roleId string) (list model.Menus, err error) {
	var menuList []model.SysMenu

	err = global.GVA_DB.Model(&model.SysMenu{}).
		Joins("sys_role_menu on sys_role_menu.menu_id = sys_menu.menu_id").
		Where("role_id = ?", roleId).Distinct("menu_id").Error
	return menuList, err
}

// 创建菜单
func CreateMenu(menu model.SysMenu) (err error) {
	if !errors.Is(global.GVA_DB.Where("menu_name = ? AND menu_parentId = ?", menu.MenuName, menu.ParentId).Error, gorm.ErrRecordNotFound) {
		return errors.New("菜单名称已存在")
	}

	err = global.GVA_DB.Create(&menu).Error
	return err
}

// 查询菜单
func QueryMenu(id uint64) (menu model.SysMenu, err error) {
	err = global.GVA_DB.First(&menu, id).Error
	return menu, err
}

// 删除菜单
func DeleteMenu(ids []uint64) (err error) {
	var total int64
	db := global.GVA_DB

	db.Where("menu_id IN", ids).Find(&model.SysMenu{}).Count(&total)
	if total == 0 {
		return errors.New("数据不存在")
	}

	err = db.Where(ids).Delete(&model.SysMenu{}).Error
	return err
}

// 更新菜单
func UpdateMenu(menu model.SysMenu) (err error) {
	db := global.GVA_DB.Model(&model.SysMenu{}).Where("menu_id = ?", menu.MenuId)
	if errors.Is(db.Error, gorm.ErrRecordNotFound) {
		return errors.New("找不到对应的菜单")
	}

	err = db.Updates(&menu).Error
	return err
}
